import { describe, it } from 'vitest'
import { RuleTester } from 'eslint'
import rule from '../src/rules/await-expect.js'

const ruleTester = new RuleTester({})

const errors = [{ messageId : 'missingAwait' }]

describe('await-expect', () => {
    it('passes rule tester', () => {
        ruleTester.run('await-expect-check', rule, {
            valid: [
                'it(`bar`, async () => { await expect($(`.foo`)).toBeDisplayed(); });',
                'it(`bar`, async () => { await expect($(`.foo`)).toExist(); });',
                'it(`bar`, async () => { await expect($(`.foo`)).toBeExisting(); });',
                'it(`bar`, async () => { await expect($(`.foo`)).toBeRequestedWith(); });',
                'it(`bar`, async () => { await expect($(`.foo`)).toHaveChildren(); });',
                'it(`bar`, async () => { await expect($(`.foo`)).toHaveTitle(); });',
                'it(`bar`, async () => { await expect($(`.foo`)).toBeElementsArrayOfSize(); });',
                'it(`bar`, async () => { expect(1).toBe(1) });',
                'it(`bar`, async () => expect(`.foo`).toHaveTitle() );',
                'it(`bar`, async () => { await Promise.all([ expect(`.foo`).toHaveTitle() ]) });',
                'bar()',
            ],
            invalid: [
                {
                    code : 'it(`foo`, async () => { expect($(`.foo`)).toBeDisplayed(); });',
                    errors,
                },
                {
                    code : 'expect($(`.foo`)).toExist()',
                    errors,
                },
                {
                    code : 'expect($(`.foo`)).toBeExisting()',
                    errors,
                },
                {
                    code : 'expect($(`.foo`)).toBeRequestedWith()',
                    errors,
                },
                {
                    code : 'expect($(`.foo`)).toHaveChildren()',
                    errors,
                },
                {
                    code : 'expect($(`.foo`)).toHaveTitle()',
                    errors,
                },
                {
                    code : 'expect($(`.foo`)).toBeElementsArrayOfSize()',
                    errors,
                }
            ],
        })
    })
})
